依據方法作用的對象不同,有分實體方法(instance method)及類別方法(class method),舉個例子來說:
kitty = Cat.new("kitty", "female")
kitty.say_hello
這個 say_hello 是作用在 kitty 這個「實體」,所以稱這個 say_hello 為實體方法。如果是這樣:
class PostsController < ApplicationController
def index
@posts = Post.all # 取得所有的 Post 資料
end
end
這裡的 all 方法是直接作用在 Post 這個「類別」上,故稱之類別方法。在 Ruby 要定義類別方法有幾種寫法,其中一種比較簡單的,就是在前面加上 self:
class Cat
def self.all
end
end
這樣就可以直接用 Cat.all 的方式呼叫了。下面是另一種寫法:
class Cat
class << self
def all
# ...
end
end
end
這樣的寫法跟前面的一樣,但這樣就不需要特別在方法前面加上 self。當一個類別裡面有很多類別方法的時候,我常會選擇這樣的寫法。
[為你自己學Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html